# www.numpy.org.cn
import numpy as np
# 自制的数据集
import dataset 
# 绘图工具库
from matplotlib import pyplot as plt

# 1 获取100组numpy数组随机数据
m=100
xs,ys = dataset.get_xy_dateset5(m)
# plt.scatter(xs,ys)
# 2 限制xy坐标量程 
#   不然图片的xy轴会根据数据发生变动
# plt.xlim(0,1)
# plt.ylim(0,1.2)
# 3 预测函数 偏置项b
w = 0.1
b = 0.1
z = w * xs + b
# 4 这节课增加了激活函数
a = 1/(1+np.exp(-z))
# 学习率alpha
alpha = 0.05

# plt.plot(xs,a)
# plt.show()

# 5 因为学习率和只学习一次 
# 没那么快线性拟合
# 多来几次
for _ in range(5000):
    # 循环100次 依次取出数据处理
    for i in range(100):
        x = xs[i]
        y = ys[i]

        # 6 对w和b求偏导
        z = w * x + b
        # sigmoid
        a = 1/(1+np.exp(-z))
        e = (y-a)**2
        deda = -2*(y-a)
        # sigmoid的导数
        dadz = a*(1-a)
        dzdw = x
        dedw = deda* dadz* dzdw
        
        dzdb = 1
        dedb = deda* dadz* dzdb

        # 更新w b
        w = w-alpha*dedw
        b = b-alpha*dedb
        
    if _%10 == 0:
        # 7 先清空下窗口 
        plt.clf()
        # 重新把点线画上去
        plt.scatter(xs,ys)
        z = w*xs+b
        a = 1/(1+np.exp(-z))
        # 限制xy坐标量程 
        #   不然图片的xy轴会根据数据发生变动
        plt.xlim(0,1)
        plt.ylim(0,1.2)

        plt.plot(xs,a)
        # 让图片更新没那么快 来个延时
        plt.pause(0.01)


# plt.show()


